require('dotenv').config();
// 创建图片路由
const router = require('express').Router()
// 导入path模块
const path = require('path')
// 导入fs文件系统模块
const fs = require('fs')
// 导入处理图片的 upload对象 模块
const upload = require('../common/upload.js')

const addr = process.env.PROTOCOL + process.env.HOST + ":" + process.env.PORT

// <input type='file' name='photo'>
// 上传图片
// 地址：/api/photo/upload
// 方式：POST
// 参数： photo
// 响应数据格式: json格式
// 示例： http://localhost:3001/api/photo/upload
router.post('/upload', upload.single('photo'), async (req, res) => {
    // 接收前端提交的文件
    let file = req.file;
    // 判断是否缺少值
    if (file == undefined) {
        res.send({
            code: -1,
            msg: '上传文件失败，请检查后再提交'
        })
    }
    else {
        // 用了正则表达式判断上传的文件格式是否为图片
        if (/\.(jpe?g|png|gif|bmp|webp)/.test(file.filename)) {
            // 定义图片路径（用于存储在数据库）
            // /static/resources/imgs/1.jpg
            let picUrl = `/static/resources/imgs/${file.filename}`;
            // 响应回给前端图片路径
            res.send({
                code: 200,
                msg: '上传图片成功。',
                picUrl,
                src: `${addr}` + picUrl
            });
        }
        else {
            res.send({
                code: -1,
                msg: '选择文件是否为图片格式'
            });
        }
    }
})



// 地址：/api/photo/upload_img
// 响应数据格式: json格式
// 参数： photo
// 示例： http://localhost:3001/api/photo/upload_img  给富文本框设置
router.post('/upload_img', upload.single('photo'), async (req, res) => {
    // 接收前端提交的文件
    let file = req.file;
    // 判断是否缺少值
    if (file == undefined) {
        res.send({
            code: -1,
            msg: '上传文件失败，请检查后再提交'
        })
    }
    else {
        // 用了正则表达式判断上传的文件格式是否为图片
        if (/\.(jpe?g|png|gif|bmp|webp)/.test(file.filename)) {
            // 定义图片路径（用于存储在数据库）
            // /static/resources/imgs/1.jpg
            let picUrl = `${addr}/static/resources/imgs/${file.filename}`;
            // 响应回给前端图片路径
            res.send({
                "errno": 0, // 注意：值是数字，不能是字符串
                "data": {
                    "url": picUrl, // 图片 src ，必须
                    "alt": "图片", // 图片描述文字，非必须
                    "href": picUrl // 图片的链接，非必须
                }
            });
        }
        else {
            res.send({
                code: -1,
                msg: '选择文件是否为图片格式'
            });
        }
    }
})

// 删除图片
// 地址：/api/photo/delete
// 方式：POST
// 参数：photo
// 响应数据格式: json格式
// 示例： http://localhost:3001/api/photo/delete
router.post('/delete', async (req, res) => {
    // 图片地址 http://
    let picUrl = req.body.picUrl;
    // 文件夹名称
    let dirName = req.body.dirName || 'imgs';
    // 判断前端是否提交了路径
    if (picUrl == undefined) {
        res.send({
            code: -1,
            msg: '缺少参数'
        })
    }
    else {
        //通过slice方法，分割出图片前面的url地址
        // http://localhost:4000/static/resources/imgs/photo-20241009-1728459979596.jpeg
        let index = picUrl.indexOf(dirName);
        // 判断该图片路径是否存在
        if (index > -1) {
            //  拼接后台的图片路径 (查找图片)
            // /imgs/photo-20241009-1728459979596.jpeg
            let temp_path = path.join(__dirname, '../public/resources/', picUrl.slice(index));
            // 删除文件
            fs.unlink(temp_path, (err) => {
                // err 如果为null 就删除图片成功 ； err 有值否则删除失败
                // console.log(err);
                if (err) {
                    res.send({
                        code: -1,
                        msg: '删除图片失败'
                    })
                }
                else {
                    //删除图片文件成功
                    res.send({
                        code: 200,
                        msg: '删除图片成功'
                    })
                }
            })
        }
        else {
            res.send({
                code: 404,
                msg: '该路径找不到图片资源。'
            })
        }
    }
})

// 把图片路由挂在系统对象上
module.exports = router;